Some systems, including systems that implement virtual machines, may include a hardware resource that is implemented as a block device. A block device includes a number of blocks of non-volatile memory. Hard disk drives, optical drives, and solid state drives are all examples of hardware devices that can be implemented as a block device. Software is required to interact with the block device. For example, an operating system and basic driver is required to communicate with the block device over a system bus or other interface. In addition, a protocol stack may be implemented to abstract operations such as memory access requests for applications executing on the system.
The protocol stack may include a number of layers operating asynchronously. A top layer may receive a request to perform a memory access operation from an application. The top layer may process the memory access request and forward the memory access request to a lower layer of the protocol stack. The protocol stack may include any number of layers, with each layer of the protocol stack providing another level of abstraction. Finally, the last layer of the protocol stack may initiate a memory access request over a physical interface that is received by the block device. Since each layer of the protocol stack operates asynchronously, there may be a delay when forwarding requests between each layer of the protocol stack. Such delays introduce latency when accessing memory. This latency reduces the efficiency of applications that rely on accessing the memory using the protocol stack. Thus, there is a need for addressing this issue and/or other issues associated with the prior art.